File Streaming হল একটি প্রক্রিয়া যেখানে ফাইলের ডাটা ছোট অংশে পড়া এবং লেখা হয়, যাতে মেমরি ব্যবহারের পরিমাণ কমে যায় এবং বৃহৎ ফাইল হ্যান্ডলিং সহজ হয়। Node.js এ streams ব্যবহৃত হয় ডাটা প্রবাহের সাথে কাজ করার জন্য, যেমন ফাইল সিস্টেম থেকে ডাটা পড়া, ডাটা প্রসেস করা বা ডাটা কোনো জায়গায় লিখা।
Node.js এ দুই ধরনের স্ট্রিম ব্যবহৃত হয়:
- Readable Streams
- Writable Streams
এই দুই ধরনের স্ট্রিম ফাইল সিস্টেম, নেটওয়ার্ক ইত্যাদির সাথে ডাটা প্রবাহ পরিচালনা করতে সহায়ক।
১. Readable Streams
Readable Streams হল সেই স্ট্রিম যেগুলো থেকে ডাটা পড়া হয়। এগুলি ডাটা স্নাত (streamed) হয়ে পড়তে থাকে এবং এই ডাটা প্রসেসিং করা যায় বা কোনো স্থানে পাঠানো যায়। fs.createReadStream() মেথডের মাধ্যমে ফাইল থেকে ডাটা পড়ার জন্য Readable Streams ব্যবহৃত হয়।
Readable Stream এর ব্যবহার:
ফাইল থেকে ডাটা পড়া:
const fs = require('fs');
// ফাইলের থেকে ডাটা পড়া
const readableStream = fs.createReadStream('example.txt', 'utf8');
// ডাটা যখন স্ট্রিম হয় তখন 'data' ইভেন্ট ট্রিগার হয়
readableStream.on('data', (chunk) => {
console.log('Received chunk:', chunk);
});
// 'end' ইভেন্ট যখন ফাইল পড়া সম্পূর্ণ হয়
readableStream.on('end', () => {
console.log('File reading complete');
});
// 'error' ইভেন্ট যদি কোনো সমস্যা ঘটে
readableStream.on('error', (err) => {
console.log('Error reading file:', err);
});উপরে দেখানো কোডে, ফাইল example.txt থেকে ডাটা পড়ার জন্য একটি Readable Stream ব্যবহার করা হয়েছে। এই স্ট্রিমে data ইভেন্টের মাধ্যমে ডাটা পড়া হয়, এবং যখন পুরো ফাইলটি পড়ে ফেলা হয়, তখন end ইভেন্ট ট্রিগার হয়।
Readable Stream এর মূল বৈশিষ্ট্য:
- ডাটা স্নাত: বড় ফাইলকে ছোট অংশে পড়ার সুবিধা দেয়।
- ব্লকিং নয়: ডাটা পড়তে সময় লাগলেও এটি অ্যাসিনক্রোনাসভাবে কাজ করে, যার ফলে অন্যান্য কাজগুলোর মধ্যে বাধা সৃষ্টি হয় না।
- ব্যাকপ্রেসার: যখন ডাটা দ্রুত প্রবাহিত হয়, তখন ব্যাকপ্রেসার ব্যবহার করে স্ট্রিমের গতিকে নিয়ন্ত্রণ করা যায়।
২. Writable Streams
Writable Streams হল স্ট্রিম যেগুলোর মাধ্যমে ডাটা লেখা হয়। এগুলো ডাটা গ্রহণ করে এবং নির্দিষ্ট জায়গায় (যেমন ফাইল, নেটওয়ার্ক ইত্যাদিতে) লেখে। Node.js এ fs.createWriteStream() ব্যবহার করে Writable Streams তৈরি করা হয়, যা ডাটা লিখতে ব্যবহৃত হয়।
Writable Stream এর ব্যবহার:
ফাইলে ডাটা লেখা:
const fs = require('fs');
// ফাইলে ডাটা লেখা
const writableStream = fs.createWriteStream('output.txt');
// 'write' মেথডের মাধ্যমে ডাটা লেখার জন্য
writableStream.write('Hello, World!\n');
writableStream.write('This is another line.\n');
// 'finish' ইভেন্ট যখন সব ডাটা লেখা হয়ে যায়
writableStream.on('finish', () => {
console.log('All data written to file');
});
// 'error' ইভেন্ট যদি কোনো সমস্যা ঘটে
writableStream.on('error', (err) => {
console.log('Error writing file:', err);
});উপরে দেওয়া কোডে, Writable Stream ব্যবহার করে output.txt ফাইলে ডাটা লেখা হয়েছে। write() মেথডের মাধ্যমে প্রতিটি চাঙ্ক ফাইলে লেখা হয়, এবং finish ইভেন্টের মাধ্যমে নিশ্চিত করা হয় যে, সব ডাটা সফলভাবে লেখা হয়েছে।
Writable Stream এর মূল বৈশিষ্ট্য:
- ডাটা লেখা: এটি ডাটা গ্রহণ করে এবং সেগুলিকে নির্দিষ্ট স্থানে লিখে।
- ব্যাকপ্রেসার: যখন ডাটা দ্রুত লিখা হয়, তখন ব্যাকপ্রেসার ব্যবহার করে স্ট্রিমের গতিকে নিয়ন্ত্রণ করা যায়।
- অ্যাসিনক্রোনাস: Writable Streams অ্যাসিনক্রোনাসভাবে কাজ করে, যাতে এটি ডাটা লেখার সময় অন্যান্য কাজ সম্পন্ন হতে পারে।
৩. Readable এবং Writable Streams একত্রে ব্যবহার
অনেক সময় Readable এবং Writable Streams একত্রে ব্যবহার করা হয়, যেমন একটি ফাইল থেকে ডাটা পড়ে অন্য একটি ফাইলে লেখার জন্য।
উদাহরণ: ফাইল কপি করা
const fs = require('fs');
// Readable Stream - ফাইল থেকে ডাটা পড়া
const readableStream = fs.createReadStream('source.txt');
// Writable Stream - নতুন ফাইলে ডাটা লেখা
const writableStream = fs.createWriteStream('destination.txt');
// Readable স্ট্রিম থেকে ডাটা পড়া এবং Writable স্ট্রিমে লেখা
readableStream.pipe(writableStream);
// 'finish' ইভেন্ট যখন সব ডাটা লেখা হয়ে যায়
writableStream.on('finish', () => {
console.log('File copied successfully!');
});এখানে, pipe() মেথডের মাধ্যমে Readable Stream থেকে ডাটা Writable Stream এ পাস করা হয়। এই পদ্ধতিটি ফাইল কপি করার জন্য ব্যবহৃত হয় এবং এটি খুবই কার্যকরী কারণ এটি ডাটা পাঠানো এবং গ্রহণ করা দ্রুত ও কার্যকরীভাবে করে।
সারাংশ
- Readable Streams ব্যবহার করে ফাইল বা ডাটা সিস্টেম থেকে ডাটা পড়া হয়, এবং Writable Streams ব্যবহার করে ডাটা লিখতে হয়।
- Readable Streams অ্যাসিনক্রোনাসভাবে ডাটা পড়তে পারে, এবং ডাটা স্নাতভাবে প্রবাহিত হয়, যার ফলে বড় ফাইল সহজেই ম্যানেজ করা যায়।
- Writable Streams ডাটা গ্রহণ করে এবং নির্দিষ্ট ফাইলে বা নেটওয়ার্কে লেখে।
- Readable এবং Writable Streams একত্রে ব্যবহার করা হলে ডাটা এক জায়গা থেকে অন্য জায়গায় দ্রুত এবং কার্যকরভাবে ট্রান্সফার করা যায়, যেমন ফাইল কপি করা।
Stream ব্যবহার করে Node.js এ ডাটা স্নাত (stream) ও অ্যাসিনক্রোনাসভাবে পরিচালনা করা সম্ভব, যা দ্রুত পারফরম্যান্স এবং কম মেমরি ব্যবহারের জন্য খুবই উপকারী।
Read more